package com.bjsxt.list;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

/**
 *
 * 缺点：添加元素是可以加入任何类型，不安全
 *      获取元素的时候需要进行强制类型转换，繁琐
 *
 *      宽进严出
 *
 *
 *  目标：安全、简单
 *  解决：使用泛型generic
 *    严进宽出
 *

 */
public class TestArrayList2 {
    public static void main(String[] args) {
        //创建一个集合对象
        //ArrayList list = new ArrayList();
        //List<Integer> list = new ArrayList<Integer>();
        List<Integer> list = new ArrayList();
        //添加元素
        list.add(80); //自动装箱 int---Integer
        list.add(90);
        list.add(80);//向末尾添加元素
//        list.add("bjsxt");
//        list.add(true);
        //list.add(new Integer(80));
        list.add(1,100);//向指定索引添加元素
        //底层发生了大量元素的后移操作，并且可能发生数组的扩容，开发者无需关注，发号施令即可

        //元素的数量
        System.out.println(list.size());//集合中真实存储的元素个数，并不是底层数组的length

        //获取指定索引的元素
        //java.lang.IndexOutOfBoundsException: Index: 11, Size: 4
        int elem = (int)list.get(1);
        System.out.println(elem);


        //遍历元素
        System.out.println(list.toString());
        //方法1：for循环
        for (int i = 0; i < list.size() ; i++) {
           int elem2 =  list.get(i);
           System.out.println(i+"------->"+elem2);
        }
        //方法2：for-each循环
        for(int elem3:list){
            System.out.println(elem3);
        }
        //方法3：Iterator
       Iterator<Integer> it = list.iterator();
       while(it.hasNext()){//是否还有数据
           int elem2 = it.next();//取出元素
            System.out.println(elem2);
       }

        //方法4：Lambda表达式+流式编程（JDK1.8）
        System.out.println("===============");
        list.forEach((elem2)->System.out.println(elem2));
        //list.forEach(System.out::println);
    }
}
